-- Copyright (c) 2015,2016 Lucky Byte, Inc.
--
-- Summary : 消费交易前处理
--
-- Author  : 吴小虎 <xiaohu@lucky-byte.com>
-- Since   : 2016.7.18
--
-- History
--  * 2015.7.18 : 创建此文件
--  * 2015.7.29 : 增加更多注释
--

-- 消费交易前处理
--  1. 交易手续费大于消费金额不允许继续交易(手续费有保底，因此有可能大于消费金额)
--
local function _preproc_t20()
    logger.debug('开始执行消费交易前处理...')

    -- 对于消费交易，交易金额应该不为空，否则是报文格式错误
    local _tramt = reqt.get_tramt()
    if not _tramt or _tramt <= 0.0 then
        logger.error('交易金额[%s]无效，不允许此消费交易.', _tramt or 'nil')
        return '05'
    end

    -- 通过商户消费手续费配置和交易金额获取手续费保底金额
    -- 手续费分借贷记，但是这里取最高的那个作为判断标准。这是因为在交易转发前，
    -- 有可能不能获取卡 bin 信息(报文中没有2域，并且磁道信息被加密)。
    local _t20_fee = reqt.merch.get('t20_fee')
    local _fee_lowest = core.fee.lowest_max({
        uuid = _t20_fee, tramt = _tramt
    })
    if _fee_lowest < 0 then
        logger.error('通过金额[%s]获取商户[%s]最低消费手续费错误，不允许此消费交易.',
            _tramt, reqt.merch.get('merno'))
        return '01'
    end
    -- 消费金额若低于最低手续费金额则停止交易，返无效金额
    if _fee_lowest > _tramt then
        logger.error('消费金额[%s]小于最低手续费[%s]，不允许此消费交易.',
            _tramt, _fee_lowest)
        return '05'
    end
    return '00'
end


return _preproc_t20
